<?php
namespace Zxf5115\Laravel\Local\Upload\Logics;

use Illuminate\Http\UploadedFile;
use Zxf5115\Laravel\Local\Upload\Utils\FileTypeUtil;
use Zxf5115\Laravel\Local\Upload\Services\FileService;

/**
 * @author zhangxiaofei [<1326336909@qq.com>]
 * @dateTime 2025-09-08
 *
 * 普通文件上传逻辑处理类
 */
class FileLogic
{
  /**
   * 普通文件服务类对象
   */
  private FileService $fileService;


  /**
   * 构造方法注入依赖关系
   *
   * @param FileService $logic 逻辑处理对象
   */
  public function __construct(FileService $fileService)
  {
    $this->fileService = $fileService;
  }


  /**
   * 上传通用文件
   *
   * @param UploadedFile $file 文件对象
   * @param string $path 存储目录
   * @param array $customAllow 自定义允许类型
   * @param bool $isFilename 是否返回文件名
   * @return string|array 上传结果
   */
  public function file(UploadedFile $file, string $path = null, array $customAllow = [], bool $isFilename = false) : string|array
  {
    $path = $path ?? 'file';

    // 根据上传类型获取允许的文件类型
    $allowTypes = FileTypeUtil::getAllowTypesByUploadType('file', $customAllow);

    return $this->fileService->file($file, $path, $allowTypes, $isFilename);
  }


  /**
   * 上传图片文件
   *
   * @param UploadedFile $file 文件对象
   * @param string $path 存储目录
   * @param array $customAllow 自定义允许类型
   * @param bool $isFilename 是否返回文件名
   * @return string|array 上传结果
   */
  public function picture(UploadedFile $file, string $path = null, array $customAllow = [], bool $isFilename = false) : string|array
  {
    $path = $path ?? 'picture';

    // 根据上传类型获取允许的文件类型
    $allowTypes = FileTypeUtil::getAllowTypesByUploadType('picture', $customAllow);

    return $this->fileService->file($file, $path, $allowTypes, $isFilename);
  }


  /**
   * 批量上传富文本中的文件
   *
   * @param UploadedFile $file 文件对象
   * @param ?string $path 存储目录
   * @param array $customAllow 自定义允许类型
   * @return string|array 上传结果
   */
  public function batchRichTextFile(UploadedFile $file, ?string $path, array $customAllow = []) : string|array
  {
    $path = $path ?? 'picture';

    // 根据上传类型获取允许的文件类型
    $allowTypes = FileTypeUtil::getAllowTypesByUploadType('rich_text', $customAllow);

    return $this->FileService->batchRichTextFile($file, $path, $allowTypes);
  }
}
